import re

# 匹配开头
print(re.match(r'abc', 'abc123'))
print(re.match(r'abc', 'xabc123'))

# 完全匹配
print(re.fullmatch(r'abc', 'abc'))
print(re.fullmatch(r'abc', 'abc123'))

# sub(pattern, repl, string, count=0)
# 用 repl 替换字符串中匹配 pattern 的部分，count 指定替换次数（默认全部）
print(re.sub(r'\d', '*', 'a1b2c3'))
print(re.sub(r'\d', '*', 'a1b2c3', count=2))

# subn(pattern, repl, string, count=0)
# 与 sub 类似，但返回 (替换后的字符串, 替换次数) 的元组。
print(re.subn(r'\d', '*', 'a1b2c3'))

# 分割字符串
print(re.split(r'\d','a1b2c3'))
# maxsplit指定最大分割次数（默认全部分割）
print(re.split(r'\d','a1b2c3', maxsplit=1))

# 返回迭代器
items = re.finditer(r'\d+', 'a12b34c56')
print(items)
for item in items:
    print(item)

# re.S：匹配包括换行符 \n 在内的所有字符（默认不匹配 \n）。

# re.A：限制 \w、\W、\d、\D 等只匹配 ASCII 字符（默认匹配 Unicode）。
print(re.match(r'\w+', 'àbc', re.A))  # 'à' 非ASCII，匹配失败（返回None）

# re.M：让 ^ 匹配每行开头，$ 匹配每行结尾（默认只匹配整个字符串的开头 / 结尾）。
text = 'line1\nline2'
print(re.findall(r'^line', text, re.M))  # 匹配两行开头，输出 ['line', 'line']

# re.I：忽略大小写匹配。
print(re.match(r'a', 'A', re.I))

# \w：匹配字母、数字、下划线
print(re.findall(r'\w', '123wads@'))

# \W：匹配非 \w 的字符
print(re.findall(r'\W', '123wads@'))

# \d：匹配数字
print(re.findall(r'\d', '123wads@'))

# \D：匹配非数字字符
print(re.findall(r'\D', '123wads@'))

# \s：匹配空白字符
print(re.findall(r'\s', '12 3w ads@'))

# \S：匹配非空白字符
print(re.findall(r'\S', '12 3w ads@'))